home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / mac / source / dialgmgr.sit / Dialogs ƒ / StringDB.p < prev    next >
Text File  |  1989-11-29  |  2KB  |  95 lines

  1. unit TStringDB;
  2.  
  3. {        ⌐1986-1989            Bill Stackhouse                                    }
  4. {                                Stackhouse Software                                }
  5. {                                Natick, MA 01760                                    }
  6.  
  7. interface
  8.  
  9. {$IFC UNDEFINED UseListItem}
  10. {$SETC UseListItem = FALSE}
  11. {$ENDC}
  12. {$IFC UseListItem}
  13.  
  14.     uses
  15.         TObject;
  16.  
  17.     type
  18.         TStringDB = object(TObject)
  19.                 fCount: Longint;
  20.                 fCurOffset: Longint;
  21.                 fDB: Handle;
  22.                 procedure TStringDB.Init;
  23.                 function TStringDB.Count: Longint;
  24.                 procedure TStringDB.Add (newString: Str255);
  25.                 function TStringDB.ReadFirst: Str255;
  26.                 function TStringDB.ReadNext: Str255;
  27.                 function TStringDB.Error: Integer;
  28.                 procedure TStringDB.Free;
  29.                 override;
  30.             end;
  31.  
  32. {$ENDC}
  33.  
  34. implementation
  35.  
  36. {$IFC UseListItem}
  37.  
  38.     procedure TStringDB.Init;
  39.     begin
  40.         SELF.fCount := 0;
  41.         SELF.fCurOffset := 0;
  42.         SELF.fDB := nil;
  43.     end;        {TStringDB.Init}
  44.  
  45.     function TStringDB.Count: Longint;
  46.     begin
  47.         Count := SELF.fCount;
  48.     end;        {TStringDB.Count}
  49.  
  50.     procedure TStringDB.Add (newString: Str255);
  51.         var
  52.             stringLength: Integer;
  53.     begin
  54.         stringLength := Length(newString) + 1;
  55.         if SELF.fDB = nil then
  56.             SELF.fDB := NewHandle(stringLength)
  57.         else
  58.             SetHandleSize(SELF.fDB, GetHandleSize(SELF.fDB) + stringLength);
  59.         if MemError = noErr then
  60.             begin
  61.                 SELF.fCount := SELF.fCount + 1;
  62.                 BlockMove(@newString, Ptr(Longint(SELF.fDB^) + SELF.fCurOffset), stringLength);
  63.                 SELF.fCurOffset := SELF.fCurOffset + stringLength;
  64.             end;
  65.     end;        {TStringDB.Add}
  66.  
  67.     function TStringDB.ReadFirst: Str255;
  68.     begin
  69.         SELF.fCurOffset := 0;
  70.         ReadFirst := SELF.ReadNext;
  71.     end;        {TStringDB.ReadFirst}
  72.  
  73.     function TStringDB.ReadNext: Str255;
  74.         var
  75.             theString: Str255;
  76.     begin
  77.         BlockMove(Ptr(Longint(SELF.fDB^) + SELF.fCurOffset), @theString, 255);
  78.         SELF.fCurOffset := SELF.fCurOffset + Length(theString) + 1;
  79.         Readnext := theString;
  80.     end;        {TStringDB.ReadNext}
  81.  
  82.     function TStringDB.Error: Integer;
  83.     begin
  84.         Error := noErr;
  85.     end;        {TStringDB.Error}
  86.  
  87.     procedure TStringDB.Free;
  88.     begin
  89.         DisposHandle(SELF.fDB);
  90.         inherited Free;
  91.     end;        {TStringDB.Free}
  92.  
  93. {$ENDC}
  94.  
  95. end.